<?php
include_once($_SERVER["DOCUMENT_ROOT"].'/outils/parameters/ParameterGetter.php');
include_once($_SERVER["DOCUMENT_ROOT"].'/outils/exceptions/PropertieException.php');
/*
 * Charge des fichiers de propriétés et les place en session
 * dans une variable readedPropertiesFiles[nomFichier][nomPropriete]
 */
class PropertiesLoader {
	public static function loadProperties($fichier) {
		$readedPropertiesFiles = ParameterGetter::getSessionParameter('readedPropertiesFiles');
		if ($readedPropertiesFiles == "") {
			//aucun fichier n'a encore été lu
			PropertiesLoader::charger($fichier);
		} else if (!isset($readedPropertiesFiles[$fichier])) {
			//Si le fichier n'a pas encore été lu, on le lit
			PropertiesLoader::charger($fichier, $readedPropertiesFiles);
		}
		//sinon le fichier a déjà été chargé
		
		//mise à jour de la variable
		$readedPropertiesFiles = ParameterGetter::getSessionParameter('readedPropertiesFiles');
		return $readedPropertiesFiles[$fichier];
	}
	
	public static function getPropertyFromFile($property, $fichier, $mandatory = false) {
		$listePropertie = loadProperties($fichier);
		$valeur = $listePropertie[$property];
		if ($valeur == null && $mandatory) {
			throw new PropertieException("La propriété '$property' n'a pas été trouvée dans le fichier de propriété : '$fichier'");
		}
		return $listePropertie[$property];
	}
	
	public static function getProperty($property, $mandatory = false) {
		$readedPropertiesFiles = ParameterGetter::getSessionParameter('readedPropertiesFiles');
		if ($readedPropertiesFiles != "") {
			foreach ($readedPropertiesFiles as $nomFichier => $readedPropertyFile) {
				if (isset($readedPropertyFile[$property])) {
					return $readedPropertyFile[$property];
				}
			}	
		}
		if ($mandatory) {
			throw new PropertieException("La propriété '$property' n'a pas été trouvée dans les fichier de propriété chargés.");
		}
		return "";
	}
	
	private static function charger($fichier, $readedPropertiesFiles = Array()) {
		$readedProperties = parse_ini_file($fichier);
		if ($readedProperties == false) {
			throw new PropertieException("Erreur à la lecture de '$fichier'");
		}
		$readedPropertiesFiles[$fichier] = $readedProperties;
		ParameterGetter::setSessionParameter('readedPropertiesFiles', $readedPropertiesFiles);
	}
}
?>